package com.itheima.service.impl;

import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itheima.mapper.ClazzMapper;
import com.itheima.pojo.Clazz;
import com.itheima.pojo.PageResult;
import com.itheima.service.ClazzService;
import com.itheima.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.util.List;

@Service
public class ClazzServiceImpl  extends ServiceImpl<ClazzMapper, Clazz> implements ClazzService {
      @Autowired
      private EmpService empService;
    @Override
    public PageResult<Clazz> pageList(String name, LocalDate begin, LocalDate end, int page, int pageSize) {
        /**
         * 我们再分也是需要一些条件分页查询,由于我们在查询时需要指定条件,因此需要new一个page对象*/
        Page<Clazz> clazzPage =Page.of(page,pageSize);
        //1.添加排序
        clazzPage.addOrder(OrderItem.desc("update_time"));

        //2.添加查询条件
     clazzPage= lambdaQuery().like(name !=null&& !name.isEmpty(),Clazz::getName,name)
                .ge(  begin !=null     ,Clazz::getBeginDate,begin)
                .le(  end !=null ,Clazz::getEndDate,end)
                .page(clazzPage);
     //3.将每页要展示的数据拿出来
        List<Clazz> records = clazzPage.getRecords();
        //4.做一个判断,如果empid不为空,则将empid与emp表中的id进行关联查询
        records.forEach(clazz -> {
            //同时对根据id查询到的员工进行判断,判断是否为null值
            if(clazz.getMasterId()!=null && empService.getById(clazz.getMasterId())!=null ){
                //获取emp表中的name (根据班级中的empid查询到对应员工,获取员工姓名设置给clazz中的MasterName)
            clazz.setMasterName(empService.getById(clazz.getMasterId()).getName());
            }
        });
        //5.对records中的staus属性进行判断,如果当前时间在endDate之后,则将status设置为已毕业,如果在beginDate之前,则将status设置为未开始,否则为进行中
        records.forEach(clazz -> {
            if (clazz.getEndDate().isBefore(LocalDate.now())) {
                clazz.setStatus("已毕业");
            } else if (clazz.getBeginDate().isAfter(LocalDate.now())) {
                clazz.setStatus("未开始");
            } else {
                clazz.setStatus("进行中");
            }
        });
        PageResult<Clazz> pageResult = new PageResult<>(clazzPage.getTotal(), records);

        return pageResult;
    }
}
